package com.ruoyi.supplier.manager;


import cn.hutool.core.convert.Convert;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.supplier.domain.bo.PurchaseBo;
import com.ruoyi.supplier.domain.bo.PurchaseItemBo;
import com.ruoyi.supplier.domain.vo.PurchaseItemVo;
import com.ruoyi.supplier.domain.vo.PurchaseVo;
import com.ruoyi.supplier.domain.vo.purchase.*;
import com.ruoyi.supplier.service.IPurchaseItemService;
import com.ruoyi.supplier.service.IPurchaseService;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class PurchaseManager {

    @Autowired
    private IPurchaseService purchaseService;

    @Autowired
    private IPurchaseItemService purchaseItemService;

    public int create(PurchaseCreateVo createVo) {
        PurchaseBo purchaseBo = Convert.convert(PurchaseBo.class,createVo);
        boolean flag = purchaseService.insertByBo(purchaseBo);
        createVo.getItems().forEach(vo ->{
            PurchaseItemBo bo = Convert.convert(PurchaseItemBo.class,vo);
            purchaseItemService.insertByBo(bo);
        });
        return flag ? 1 : 0;
    }

    public TableDataInfo<PurchaseVo> queryPageList(PurchasePageQueryVo purchasePageQueryVo) {
        PurchaseBo bo = new PurchaseBo();
        bo.setSupplierId(purchasePageQueryVo.getSupplierId());
        bo.setStatus(purchasePageQueryVo.getStatus());
        PageQuery pageQuery = new PageQuery();
        pageQuery.setPageNum(purchasePageQueryVo.getPageNum());
        pageQuery.setPageSize(purchasePageQueryVo.getPageSize());
        return purchaseService.queryPageList(bo,pageQuery);
    }

    public PurchaseDetailVo detail(Integer purchaseId) {
        PurchaseVo purchaseVo = purchaseService.queryById(purchaseId);
        PurchaseDetailVo detailVo = Convert.convert(PurchaseDetailVo.class,purchaseVo);
        PurchaseItemBo bo = new PurchaseItemBo();
        bo.setShopId(purchaseVo.getShopId());
        List<PurchaseItemVo> items = purchaseItemService.queryList(bo);
        List<PurchaseDetailItem> itemList = Convert.toList(PurchaseDetailItem.class,items);
        itemList.forEach(item -> {
            PurchaseItemAlbumVo albumVo = new PurchaseItemAlbumVo();
            albumVo.setType(item.getImageType());
            albumVo.setUrl(item.getImage());
            PurchaseItemAlbumVo albumVo2 = new PurchaseItemAlbumVo();
            albumVo2.setType("2");
            albumVo2.setUrl(item.getVideo());
            List<PurchaseItemAlbumVo> list = Lists.newArrayList();
            list.add(albumVo);
            list.add(albumVo2);
            item.setAlbum(list);
        });
        detailVo.setItems(itemList);
        return detailVo;
    }

    public void lack(PurchaseLackVo lackVo) {
        PurchaseItemVo purchaseItemVo = purchaseItemService.queryById(lackVo.getPurchaseItemId());
        purchaseItemVo.setLackNum(lackVo.getLackNum());
        PurchaseItemBo bo = Convert.convert(PurchaseItemBo.class,purchaseItemVo);
        purchaseItemService.updateByBo(bo);
    }

    public TableDataInfo<PurchaseOutVo> queryOutPageList(PurchasePageQueryVo purchasePageQueryVo) {
        PurchaseItemBo bo = new PurchaseItemBo();
        PageQuery pageQuery = new PageQuery();
        pageQuery.setPageNum(purchasePageQueryVo.getPageNum());
        pageQuery.setPageSize(purchasePageQueryVo.getPageSize());
        TableDataInfo<PurchaseItemVo> dataInfo = purchaseItemService.queryPageList(bo, pageQuery);
        List<PurchaseOutVo> collect = dataInfo.getRows().stream().map(item -> {
            PurchaseItemAlbumVo albumVo = new PurchaseItemAlbumVo();
            albumVo.setType(String.valueOf(item.getImageType()));
            albumVo.setUrl(item.getImage());
            PurchaseItemAlbumVo albumVo2 = new PurchaseItemAlbumVo();
            albumVo2.setType("2");
            albumVo2.setUrl(item.getVideo());
            List<PurchaseItemAlbumVo> list = Lists.newArrayList();
            list.add(albumVo);
            list.add(albumVo2);
            PurchaseOutVo outVo = Convert.convert(PurchaseOutVo.class, item);
            outVo.setItem(list);
            return outVo;
        }).collect(Collectors.toList());
        return TableDataInfo.build(collect);
    }

    public PurchaseDetailVo outDetail(Integer purchaseId) {
        return detail(purchaseId);
    }
}
